//题目:
// 给你一个二叉树的根节点 root ，树中每个节点都存放有一个 0 到 9 之间的数字。
// 每条从根节点到叶节点的路径都代表一个数字：
// 例如，从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
// 计算从根节点到叶节点生成的 所有数字之和 。
// 叶节点 是指没有子节点的节点。
#include<iostream>

using namespace std;
//代码:
struct TreeNode 
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution 
{
public:
    void cursion(TreeNode* root,int& ret,int count)
    {
        count+=root->val;//得到从根节点到本节点的数字
        //处理叶子结点
        if(root->left==nullptr && root->right==nullptr){  ret+=count;  return;  }
        //处理“残缺结点”
        if(root->left==nullptr){  cursion(root->right,ret,count*10);  return;  }
        if(root->right==nullptr){  cursion(root->left,ret,count*10);  return;  }
        //处理完整结点
        cursion(root->left,ret,count*10);
        cursion(root->right,ret,count*10);
    }
    int sumNumbers(TreeNode* root) 
    {
        int ret=0;
        cursion(root,ret,0);
        return ret;
    }
};